package com.itheima.作业.内部员工管理系统;

/**
 * **训练目标**：掌握Java中继承的使用
 * **需求背景**： 某公司开发一个内部员工管理系统，需要展示公司各个岗位员工的个人信息和工作内容。公司员工分类：项目经理、研发工程师、招聘经理等，请自定义相应的类，模拟软件实现效果。
 * **需求描述：**
 * 请在程序中，分别创建三个对象，且给对象属性赋值，并调用方法在控制台输出结果。具体对象属性及方法如下：
 * - 项目经理(Manager)：
 *   - 属性：姓名(name)、工号(id)、工资(salary)、奖金(bonus)
 *   - 行为：工作(work)
 *     - 控制台输出效果：工号为xxx的xxx的项目经理，拿着xxx的工资和xxx的奖金，正在盯着程序员写代码。
 * - 研发工程师(Coder)：
 *   - 属性：姓名、工号、工资
 *   - 行为：工作
 *     - 控制台输出效果：工号为xxx的xxx的程序员，拿着xxx的工资，正在苦逼的写代码。
 * - 招聘经理(Recruiter)：
 *   - 属性：姓名、工号、工资、提成(Commission)
 *   - 行为：工作
 *     - 控制台输出效果：工号为xxx的xxx的招聘经理，拿着xxx的工资，正在Boss直评上招人，招一个提成xxx元。
 * **实现提示**：
 * 1. 定义三个类，项目经理、研发工程师、招聘经理，根据需求分别定义类中的属性和方法，以及set和get、构造方法。
 * 2. 完成类定义后，发现三个类中有大量重复代码，可以考虑使用今天学习内容，来提高代码的复用性。
 * 3. 定义测试类，测试类中定义main方法，分别创建三个不同员工的对象，并给对象中的属性赋值，最后分别调用类中的工作方法，在控制台打印结果。
 */
public abstract class Person {
    private String name;
    private String id;
    private double salary;

    public Person(double salary, String id, String name) {
        this.salary = salary;
        this.id = id;
        this.name = name;
    }
    public Person() {
    }

    public abstract void work();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", id='" + id + '\'' +
                ", salary=" + salary +
                '}';
    }
}
